package com.hina.rec.application.convert.system;


import com.hina.rec.domain.model.RoleDO;
import com.hina.rec.endpoint.req.system.RoleSaveReq;
import com.hina.rec.endpoint.req.system.RoleUpdateReq;
import com.hina.rec.endpoint.res.system.RoleRes;
import com.hina.rec.endpoint.res.system.SimpleRoleRes;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 角色对象转换器
 *
 * @author liaosp
 * @date 2024-01-10
 */
@Mapper
public interface RoleConvert {

    RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class);

    /**
     * 角色创建请求转换为角色DO
     *
     * @param req 角色创建请求
     * @return 角色DO
     */
    RoleDO toRoleDO(RoleSaveReq req);

    /**
     * 角色更新请求转换为角色DO
     *
     * @param req 角色更新请求
     * @return 角色DO
     */
    RoleDO toRoleDO(RoleUpdateReq req);

    /**
     * 角色DO转换为角色响应对象
     *
     * @param roleDO 角色DO
     * @return 角色响应对象
     */
    RoleRes toRoleRes(RoleDO roleDO);

    /**
     * 角色DO列表转换为精简角色响应对象列表（只包含id和roleName）
     *
     * @param roleDOList 角色DO列表
     * @return 精简角色响应对象列表
     */
    List<SimpleRoleRes> toSimpleRoleResList(List<RoleDO> roleDOList);

    /**
     * 角色DO列表转换为角色响应对象列表
     *
     * @param roleDOList 角色DO列表
     * @return 角色响应对象列表
     */
    List<RoleRes> toRoleResList(List<RoleDO> roleDOList);
}